Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
以特定格式将两个文件合并为一个文件-Bash_Bash_Shell_Web Scraping_Scripting_Formatting - Fatal编程技术网

以特定格式将两个文件合并为一个文件-Bash

以特定格式将两个文件合并为一个文件-Bash,bash,shell,web-scraping,scripting,formatting,Bash,Shell,Web Scraping,Scripting,Formatting,我想将3个文件合并成1个文件,格式类似于 (file1,file2) 我有两个文件name.txt,price.txt Name.txt Cappuccino with Milk Chocolate Cookie Cappuccino with Double Chocolate Cookie Latte with Milk Chocolate Cookie Latte with Double Chocolate Cookie Rs 288 Rs 288 Rs 288 Rs 288 Rs 1

我想将3个文件合并成1个文件,格式类似于

(file1,file2)

我有两个文件name.txt,price.txt

Name.txt

Cappuccino with Milk Chocolate Cookie
Cappuccino with Double Chocolate Cookie
Latte with Milk Chocolate Cookie
Latte with Double Chocolate Cookie
Rs 288
Rs 288
Rs 288
Rs 288
Rs 159
price.txt

Cappuccino with Milk Chocolate Cookie
Cappuccino with Double Chocolate Cookie
Latte with Milk Chocolate Cookie
Latte with Double Chocolate Cookie
Rs 288
Rs 288
Rs 288
Rs 288
Rs 159
我真正想要的是一个新文件
(deals.txt)
应该包含以下格式的这两个文件中的数据

(Cappuccino with Milk Chocolate Cookie, Rs 288)
#there should be a space inbetween 
(Cappuccino with Double Chocolate Cookie, Rs 288)
#there should be a space inbetween 
(Latte with Milk Chocolate Cookie, Rs 288 )
我使用这个逻辑,但它不能满足我想要的格式
粘贴name.txt price.txt>>price+name.txt
它给出如下输出:

Cappuccino with Milk Chocolate Cookie   Rs 288
Cappuccino with Double Chocolate Cookie Rs 288

行间没有空格,名称和价格之间没有逗号。请帮忙

One
sed
解决方案:

$ paste -d, name.txt price.txt | sed "/^,/d;/,$/d;s/,/, /;s/^/(/;s/$/)\n/"
(Cappuccino with Milk Chocolate Cookie, Rs 288)

(Cappuccino with Double Chocolate Cookie, Rs 288)

(Latte with Milk Chocolate Cookie, Rs 288)

(Latte with Double Chocolate Cookie, Rs 288)
$ paste -d, name.txt price.txt | awk -F"," '$1=="" { next } $2=="" { next } { printf "(%s, %s)\n\n",$1,$2 }'
(Cappuccino with Milk Chocolate Cookie, Rs 288)

(Cappuccino with Double Chocolate Cookie, Rs 288)

(Latte with Milk Chocolate Cookie, Rs 288)

(Latte with Double Chocolate Cookie, Rs 288)
#!/bin/bash

for LINE in $(nl Name.txt |awk '{ print $1 }'); do
  echo "($(sed -n "${LINE}p" Name.txt), $(sed -n "${LINE}p" price.txt))"
  echo -en '\n'
done >> deals.txt
其中:

  • /^,/d
    -删除以逗号开头的行(即,第一个文件中没有匹配的行)
  • /,$/d
    -删除以逗号结尾的行(即,第二个文件中没有匹配的行)
  • s/,/,/
    -在逗号后添加空格
  • s/^/(/
    -在行首添加左括号
  • s/$/)\n/
    -在行尾添加右括号和额外换行符(
    \n

一个
awk
解决方案:

$ paste -d, name.txt price.txt | sed "/^,/d;/,$/d;s/,/, /;s/^/(/;s/$/)\n/"
(Cappuccino with Milk Chocolate Cookie, Rs 288)

(Cappuccino with Double Chocolate Cookie, Rs 288)

(Latte with Milk Chocolate Cookie, Rs 288)

(Latte with Double Chocolate Cookie, Rs 288)
$ paste -d, name.txt price.txt | awk -F"," '$1=="" { next } $2=="" { next } { printf "(%s, %s)\n\n",$1,$2 }'
(Cappuccino with Milk Chocolate Cookie, Rs 288)

(Cappuccino with Double Chocolate Cookie, Rs 288)

(Latte with Milk Chocolate Cookie, Rs 288)

(Latte with Double Chocolate Cookie, Rs 288)
#!/bin/bash

for LINE in $(nl Name.txt |awk '{ print $1 }'); do
  echo "($(sed -n "${LINE}p" Name.txt), $(sed -n "${LINE}p" price.txt))"
  echo -en '\n'
done >> deals.txt
其中:

  • -F“,”
    -使用逗号作为输入字段分隔符
  • $1==”{next}
    -如果第一个字段为空,则跳过行(即,第一个文件中没有匹配的行)
  • $2==”{next}
    -如果第二个字段为空,则跳过第二行(即,第二个文件中没有匹配的行)
  • printf…
    -打印带有括号包装、逗号+空格分隔符的行,并在末尾添加换行符

此基于循环的解决方案:

$ paste -d, name.txt price.txt | sed "/^,/d;/,$/d;s/,/, /;s/^/(/;s/$/)\n/"
(Cappuccino with Milk Chocolate Cookie, Rs 288)

(Cappuccino with Double Chocolate Cookie, Rs 288)

(Latte with Milk Chocolate Cookie, Rs 288)

(Latte with Double Chocolate Cookie, Rs 288)
$ paste -d, name.txt price.txt | awk -F"," '$1=="" { next } $2=="" { next } { printf "(%s, %s)\n\n",$1,$2 }'
(Cappuccino with Milk Chocolate Cookie, Rs 288)

(Cappuccino with Double Chocolate Cookie, Rs 288)

(Latte with Milk Chocolate Cookie, Rs 288)

(Latte with Double Chocolate Cookie, Rs 288)
#!/bin/bash

for LINE in $(nl Name.txt |awk '{ print $1 }'); do
  echo "($(sed -n "${LINE}p" Name.txt), $(sed -n "${LINE}p" price.txt))"
  echo -en '\n'
done >> deals.txt
将创建一个文件
deals.txt
,其中包含:

(Cappuccino with Milk Chocolate Cookie, Rs 288)

(Cappuccino with Double Chocolate Cookie, Rs 288)

(Latte with Milk Chocolate Cookie, Rs 288)

(Latte with Double Chocolate Cookie, Rs 288)


欢迎来到堆栈溢出。这也是一个面向专业和热情程序员的问答页面。请在问题中添加您自己的代码。您至少需要显示您自己为解决此问题所做的研究量。请使用您用于匹配文件之间行的逻辑更新此问题(是否仅基于行号?)@Cyrus我正在使用这个命令
paste name.txt price.txt>>price-name.txt
,但是它给出了一个类似
Cappuccino with Milk Chocolate Cookie Rs 288
的输出,我需要在名称和价格之间加一个逗号。在一条线和另一条线之间应该有一个空间line@markp-扶桑一号已经更新了代码部分。请复习。对于同一个问题,你现在有7个问题。为什么不一次读取整个数据,而不是在不同的文件中分离https://www.mcdelivery.com.pk/pk/browse/menu.html“$LINE”| grep'.*”| sed的/]\+>//g'>$var.txt我想用grep获取的名称将curl中的数据保存到一个文件中。例如,如果
grep
命令获取了
beverages
,那么它应该生成一个名为
beverage.txt
1-Name:Mc Crispy Price:300
的文件,我将如何实现这种格式<代码>名称:然后在下一行
价格
然后空格,然后在下一行重复格式我建议创建新问题以满足新要求。。。与增加/修改当前问题的范围相反
var=curlhttps://www.mcdelivery.com.pk/pk/browse/menu.html“$LINE”| grep'.*”| sed的/]\+>//g'>$var.txt
我想用grep获取的名称将curl中的数据保存到一个文件中。例如,如果
grep
命令获取了
beverages
,那么它应该创建一个名为
beverage.txt的文件,然后将
VAR
放在
$()
之间,如下所示:
VAR=$(curlhttps://www.mcdelivery.com.pk/pk/browse/menu.html“$LINE”| grep.*.| sed's/]\+>//g')
。然后可以运行
curlhttps://www.mcdelivery.com.pk/pk/browse/menu.html“$LINE”>$var.txt
。我必须运行
var=$(curl)吗https://www.mcdelivery.com.pk/pk/browse/menu.html“$LINE”| grep.*.| sed's/]\+>//g')
然后运行
curlhttps://www.mcdelivery.com.pk/pk/browse/menu.html“$LINE”>$var.txt
单独?是,因为在第一种情况下,您只是声明变量以使其稍后工作,而不是运行它。
ARRAY=(),而read-r LINE do ARRAY+=(“$LINE”)done//g')卷曲https://www.mcdelivery.com.pk/pk/browse/menu.html“$LINE”>$var.txt done
我正在这样做,但它没有创建var变量正在获取的任何文件