使用分隔符

时间:2018-05-14 22:08:01

标签: bash awk sed grep cut

更新的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

4 个答案:

答案 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