更新的QS: 我一直在研究一个bash脚本,它将多个文本文件与数值合并为一个单行文本文件,并在合并时使用每个文件值的分隔符
示例:
File1.txt has the followling contents:
168321099
File2.txt has:
151304
151555
File3.txt has:
16980925
File4.txt has:
154292
149092
Now i want a output.txt file like below:
, 168321099 151304 151555 16980925 , 154292 149092
基本上每个文件由空格和单行分隔,逗号作为第一个和第6个字段
尝试:
cat * > out.txt but its not coming as expected
答案 0 :(得分:1)
我不太确定如果我理解你的问题,但我将其解释如下:
file1,...,filen
包含一组您希望在一行中打印的字词。,
,而在第4个字符和第5个字符之间,您希望拥有,
。 cat
+ tr
+ awk
解决方案:
$ cat <file1> ... <filen> | tr '\n' ' ' | awk '{$1=", "$1; $4=$4" ,"; print}'
awk
解决方案:
$ awk 'NR==1||NR==4{printf s",";s=" "}{printf " "$1}' <file1> ... <filen>
答案 1 :(得分:0)
如果系统上有tr
,您可以执行以下cat * | tr "\n" " " > out.txt
tr "\n" " "
将所有换行符转换为空格
答案 2 :(得分:0)
如果每个文件的行数是常数,那么最简单的方法是tr
,如@Littlefinix建议的那样,有几个匿名文件提供逗号,最后一个echo用于添加显式换行符到输出线:
cat <(echo ",") File1.txt File2.txt File3.txt <(echo ",") File4.txt | tr "\n" " " > out.txt; echo >> out.txt
out.txt正是您指定的内容:
, 168321099 151304 151555 16980925 , 154292 149092
如果每个输入文件的行数可能不同(例如,File2.txt有3行或4行等),那么将逗号总是放在第1和第6个字段中将更加复杂,并且您将... d可能需要一个脚本而不是单行。
答案 3 :(得分:0)
关注单awk
可以帮助您。
awk 'FNR==1{count++;} {printf("%s%s",count==1||(count==(ARGC-1)&&FNR==1)?", ":" ",$0)} END{print ""}' *.txt
现在也添加非单线形式的解决方案。
awk '
FNR==1 { count++ }
{ printf("%s%s",count==1||(count==(ARGC-1)&&FNR==1)?", ":" ",$0) }
END { print "" }
' *.txt