簡體   English   中英

Bash:如何將多行讀入另一個文件,同時替換delim和在令牌$ n后截斷

[英]Bash: how to read a multiple lines into another file, while replacing delims and truncating after token $n

我想做的是將一個特定文件的格式更改為另一個:

input.csv:

value1,value2,value3,value4,value5,value6

output.txt:

value2:value3

我幾乎可以使用以下命令執行此操作,但是所有這些操作都在同一行上讀取,而不是多次讀取:

output=$(while IFS="," read -r value1 value2 value3 remainder; do echo $value2:$value3 ; done < "input.csv")
echo $output > output.txt

通過在回顯字符串的末尾添加\\解決了我自己的問題

awk

awk -F',' '{printf "%s:%s\n", $2, $3}' file.csv

印刷用逗號分開的第二和第三列:作為分隔符。

例:

% awk -F',' '{printf "%s:%s\n", $2, $3}' <<<'value1,value2,value3,value4,value5,value6'
value2:value3

通過在回顯字符串的末尾添加反斜杠“ \\”來解決

如果不需要其他任何output變量,則可以通過刪除命令替換來保存pid和一些麻煩

while IFS=',' read -r value1 value2 value3 remainder; do
  echo "$value2:$value3"
done

處理csv輸入的更可靠,更通用的方法是使用awk,如https://www.gnu.org/software/gawk/manual/html_node/Splitting-By-Content.html所示

awk 'BEGIN {FPAT="([^,]*)|(\"[^\"]+\")"; OFS=":"} {print $2,$3}'

暫無
暫無

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

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