簡體   English   中英

無法分開分號分隔線awk

[英]Unable to separate semi-colon separated line awk

我正在嘗試執行以下操作:

  1. 逐行讀取文件。
  2. 每行具有以下結構: field1;field2;field3
  3. 使用awk分隔這些字段中的每一個,然后進一步處理這些字段中的每一個

我的代碼片段是:

while read l
do
n=`echo ${l} | awk --field-separator=";" '{print NF}'`
field1=`echo ${l} | awk --field-separator=";" '{print $1}'`
field2=`echo ${l} | awk --field-separator=";" '{print $2}'`
field3=`echo ${l} | awk --field-separator=";" '{print $3}'`
echo ${n} ${field1} ${field2} ${field3} 
done < temp 

其中temp只包含以下行:

xx;yy;zz  

我在命令行上得到的答案是:

1 xx;yy;zz

我不確定我理解這個輸出。 任何解釋都會很好,因為它確實適用於其他文件。 我正在使用Mac,而此代碼在bash腳本中使用awk

為什么awk什么時候你可以用純粹的bash做到這一點?

while IFS=';' read -r field1 field2 field3; do
    echo "Field1: $field1"
    echo "Field2: $field2"
    echo "Field3: $field3"
done < file.txt

或者,如果您不知道字段數:

while IFS=';' read -ra fields; do        
    echo "Number of fields: ${#fields[@]}"
    echo "Field1 ${fields[0]}"
done < file.txt

你的awk不知道是什么--field-separator=";" 當你這樣做時意味着:

awk --field-separator=";" '{print $1}'

你的awk仍然使用空格的默認FS,所以$ 1包含你的整個輸入行,而$ 2和$ 3是空的。 使用-F';' 設置FS。

你是如此,如何編寫你想要的腳本。 如果您告訴我們更多關於“處理每個領域”的內容,我們可以幫助您。

這可能是你的awk的一個bug。 嘗試其他類似的格式:

while read l
do
    n=`echo "${l}" | awk -F\; '{print NF}'`
    field1=`echo "${l}" | awk -F\; '{print $1}'`
    field2=`echo "${l}" | awk -F\; '{print $2}'`
    field3=`echo "${l}" | awk -F\; '{print $3}'`
    echo "${n} ${field1} ${field2} ${field3}"
done < temp 

要么

while read l
do
    n=`echo "${l}" | awk -v 'FS=;' '{print NF}'`
    field1=`echo "${l}" | awk -v 'FS=;' '{print $1}'`
    field2=`echo "${l}" | awk -v 'FS=;' '{print $2}'`
    field3=`echo "${l}" | awk -v 'FS=;' '{print $3}'`
    echo "${n} ${field1} ${field2} ${field3}"
done < temp 

要么

while read l
do
    n=`echo "${l}" | awk 'BEGIN{FS=";"}{print NF}'`
    field1=`echo "${l}" | awk 'BEGIN{FS=";"}{print $1}'`
    field2=`echo "${l}" | awk 'BEGIN{FS=";"}{print $2}'`
    field3=`echo "${l}" | awk 'BEGIN{FS=";"}{print $3}'`
    echo "${n} ${field1} ${field2} ${field3}"
done < temp 

嘗試其他類似mawknawk

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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