从文本文件中grep多个字符串并将其导出为CSV

mah*_*hod 0 linux bash shell

我有shell脚本,它产生多个输出

例如

#/bin/bash
var1=`cat test.json | grep "test" | awk -F ' ' '{print $1}'`
var2=`cat test.json | grep -e "new" | awk -F ':' '{print$5}'`
var3=`cat test.json | grep -e "new-test" | awk -F ':' '{print$8}'`

echo $var1,var2,var3
Run Code Online (Sandbox Code Playgroud)

第一个var1的输出是

1 
2 
3 
4 
5
Run Code Online (Sandbox Code Playgroud)

第一个var2的输出是

3
4
5
6
7
Run Code Online (Sandbox Code Playgroud)

第一个var3的输出是

834
45
345
73
23
Run Code Online (Sandbox Code Playgroud)

如何使用以下格式创建csv文件?

1,3,834
2,4,45
3,5,345
4,6,73
5,7,23
Run Code Online (Sandbox Code Playgroud)

gle*_*man 5

paste命令是你想要的,与bash进程替换一起:

paste -d, <(echo "$var1") <(echo "$var2") <(echo "$var3")
Run Code Online (Sandbox Code Playgroud)
1,3,834
2,4,45
3,5,345
4,6,73
5,7,23
Run Code Online (Sandbox Code Playgroud)

确保引用变量以维护其中的换行符.


您的管道可以更简单:cat不需要,awk可以执行grep所做的事情:

paste -d, \
    <(awk -F ' ' '/test/     {print $1}' test.json) \
    <(awk -F ':' '/new/      {print $5}' test.json) \
    <(awk -F ':' '/new-test/ {print $8}' test.json)
Run Code Online (Sandbox Code Playgroud)