簡體   English   中英

為什么要用兩行awk打印?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM