在awk的输出上调用命令

时间:2016-03-18 21:31:37

标签: unix awk

我是shell脚本的初学者,我需要运行一个命令,从文件中获取第一列(基于分隔符〜)。该命令的输出列出了新行中的所有名称,然后我需要将其转换为以逗号分隔的列表。以下是命令:

FILES=`cat 'testfile.txt' | grep 'teststring' | 
       awk -F~ '{print $1}'| sed 's/\n/\,/g' | awk '{print;}'`

运行它会在新行中打印文件的内容,但我不会以逗号分隔最终的o / p。有人可以帮助我吗?

2 个答案:

答案 0 :(得分:1)

您可以使用

FILES=`awk -v RS='~' -v ORS=, '/teststring/' 'testfile.txt' `
  • 我们使用~作为记录分隔符,将~的输入拆分为不同的
  • 我们使用/teststring/代替grep
  • {print $0}可以省略($0,我们从~拆分得到),因为它是默认操作
  • 通过将ORS(输出记录分隔符)设置为,,我们得到逗号分隔输出

答案 1 :(得分:0)

paste是将换行符转换为逗号的好工具:

files=$(awk -F~ '/teststring/ {print $1}' testfile.txt | paste -s -d,)

不要使用ALLCAPSVARNAMES,它很容易践踏shell变量并破坏你的脚本