[英]Unable to separate semi-colon separated line awk
我正在嘗試執行以下操作:
field1;field2;field3
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
嘗試其他類似mawk
或nawk
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.