[英]Why awk print in two lines?
$ cat ff
./res/values/strings.xml:1293: <string name="sub1LineNumber">Sub1 Number :</string>
./res/values/strings.xml:1302: <string name="xdivert_partial_set">XDivert has been set only for 1st subscription</string>
./res/values/strings.xml:1870: <string name="set_sub_1">Subscription 1: </string>
./res/values/strings.xml:1860: <string name="sub_1">SUB 1</string>
for f in $(cat ff |awk -F : '{print $1" +" $2}'); do echo $f; done
./res/values/strings.xml
+1293
./res/values/strings.xml
+1302
./res/values/strings.xml
+1870
./res/values/strings.xml
+1860
我想在一行中以$ 1 + $ 2格式打印$ 1和$ 2,但是在上面打印,這是怎么回事?
您不需要awk
命令周圍的for
包裝器。
如果僅運行awk
命令,則將獲得所需的輸出:
$ cat ff | awk -F : '{print $1 " +" $2}'
./res/values/strings.xml +1293
./res/values/strings.xml +1302
./res/values/strings.xml +1870
./res/values/strings.xml +1860
發生的情況是$(...)
包裝器和for
循環導致awk
輸出中每個以空格分隔的單詞成為循環的單獨輸入。 刪除循環,並解決問題。
awk
不打印兩行; 您的echo
打印兩行,因為文件名和行號之間有空格,因此for
循環將文件名視為f
一個值,然后將行號視為第二個值,依此類推。
您也不需要使用cat
; awk
也可以讀取文件。
對於所示的循環體,您可以編寫:
awk '{print $1 " +" $2}' ff
對於更通用的循環主體,最好避免使用空格:
for f in $(awk '{print $1 "+" $2 }' ff)
do
...whatever...
done
為分隔符for
是任何空間,所以在AWK輸出的空間將被視為一個單獨的值。
您可以使用while read
構造一次讀取輸出行,而不是for循環。 例如,
awk -F : '{print $1 " +" $2}' ff | while read f; do
echo "$f"
done
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.