bash 中的 awk 命令:如何停止添加新行?
awk command in bash: how to stop new line being added?
我有多个 bash 代码文件,每个文件有 3-4 行(如下所示)。
#!/bin/bash
echo "xy"
echo "x.com"
echo "z"
我想要如下所示的输出 csv 文件(每个文件在 csv 文件的一行中输出)
|name|sit|alternate_name
|:----|:----:|----|
|x|x.com|z
|y|y.com|f
但我得到的输出是这样的-
||
|:----:|
|x|
|x.com|
|z|
|y|
|y.com|
|f|
我的代码如下-
for i in $(ls script_B*)
do
./$i | awk -F ':' '{OFS=",";print ,,}' >> output.csv
done
我是这方面的菜鸟,无法对 awk 进行太多研究。
感谢任何帮助。
你需要积累3行输入才能写出一行输出,比如
$ awk -F: 'BEGIN {OFS=","} NR % 3 == 1 {line1=[=10=]} NR % 3 == 2 {line2=[=10=]} NR % 3 == 0 { print line1, line2, [=10=] }' <<EOF
x
x.com
z
EOF
x,x.com,z
NR
为当前输入行的编号(从1开始)。计算余数模 3 告诉您您是在输入组的第一行、第二行还是第三行。如果每个 awk
只读取一个 3 行文件,您可以将其简化为
% awk -F: 'BEGIN {OFS=","} NR == 1 {line1=[=11=]} NR == 2 {line2=[=11=]} NR == 3 { print line1, line2, [=11=] }' <<EOF
x
x.com
z
EOF
x,x.com,z
前两种情况,你必须用变量记住当前行,直到awk
读到最后一行;我不知道 awk
的某个版本允许您在 一个动作中使用更多行输入 。
我发现 xargs -L
在这方面也有帮助:
for i in script_B*
do
"$i" | xargs -L3
done
虽然这不是这个技巧的最佳应用(当你尝试输入逗号时它很容易被破坏),但我发现当我 grep 搜索结果并且它们以两个不同的方式到达时它非常有用线。例如:
command | grep -e "IP|status" | xargs -L2
无论如何,回到你的问题,你可以在输出中加入逗号,但它不可靠,因为如果你的任何脚本生成带空格的行,它就会中断:
for i in script_B*
do
"$i" | xargs -L3
done | tr " " ","
我有多个 bash 代码文件,每个文件有 3-4 行(如下所示)。
#!/bin/bash
echo "xy"
echo "x.com"
echo "z"
我想要如下所示的输出 csv 文件(每个文件在 csv 文件的一行中输出)
|name|sit|alternate_name
|:----|:----:|----|
|x|x.com|z
|y|y.com|f
但我得到的输出是这样的-
||
|:----:|
|x|
|x.com|
|z|
|y|
|y.com|
|f|
我的代码如下-
for i in $(ls script_B*)
do
./$i | awk -F ':' '{OFS=",";print ,,}' >> output.csv
done
我是这方面的菜鸟,无法对 awk 进行太多研究。 感谢任何帮助。
你需要积累3行输入才能写出一行输出,比如
$ awk -F: 'BEGIN {OFS=","} NR % 3 == 1 {line1=[=10=]} NR % 3 == 2 {line2=[=10=]} NR % 3 == 0 { print line1, line2, [=10=] }' <<EOF
x
x.com
z
EOF
x,x.com,z
NR
为当前输入行的编号(从1开始)。计算余数模 3 告诉您您是在输入组的第一行、第二行还是第三行。如果每个 awk
只读取一个 3 行文件,您可以将其简化为
% awk -F: 'BEGIN {OFS=","} NR == 1 {line1=[=11=]} NR == 2 {line2=[=11=]} NR == 3 { print line1, line2, [=11=] }' <<EOF
x
x.com
z
EOF
x,x.com,z
前两种情况,你必须用变量记住当前行,直到awk
读到最后一行;我不知道 awk
的某个版本允许您在 一个动作中使用更多行输入 。
我发现 xargs -L
在这方面也有帮助:
for i in script_B*
do
"$i" | xargs -L3
done
虽然这不是这个技巧的最佳应用(当你尝试输入逗号时它很容易被破坏),但我发现当我 grep 搜索结果并且它们以两个不同的方式到达时它非常有用线。例如:
command | grep -e "IP|status" | xargs -L2
无论如何,回到你的问题,你可以在输出中加入逗号,但它不可靠,因为如果你的任何脚本生成带空格的行,它就会中断:
for i in script_B*
do
"$i" | xargs -L3
done | tr " " ","