我想將命令的輸出寫入 csv 檔案的特定列(第 3 和第 5 列)。
#!/bin/bash
echo -e "Value,1\nCount,1" >> file.csv
echo "Header1,Header2,Path,Header4,Value,Header6" >> file.csv
sed 'y/ /,/' input.csv >> file.csv
上面代碼片段中的input.csv看起來像這樣
1234567890 /training/folder
0325435287 /training/newfolder
file.csv 的當前輸出
Value,1
Count,1
Header1,Header2,Path,Header4,Value,Header6
1234567890,/training/folder
0325435287,/training/newfolder
file.csv 的預期輸出
Value,1
Count,1
Header1,Header2,Path,Header4,Value,Header6
,,/training/folder,,1234567890,
,,/training/newfolder,,0325435287,
uj5u.com熱心網友回復:
所有操作都可以在一個單一的awk:
awk -v OFS=, -v pre="Value,1\nCount,1" -v hdr="Header1,Header2,Path,Header4,Value,Header6" '
BEGIN {print pre; print hdr}
{print "", "", $1, "", $2, ""}
' input.csv
Value,1
Count,1
Header1,Header2,Path,Header4,Value,Header6
,,i1234567890,,/training/folder,
,,0325435287,,/training/newfolder,
uj5u.com熱心網友回復:
有了sed你可以試試下面的代碼。這是使用sed的反向參考能力。
sed -E 's/(^[^ ]*) (.*$)/,,\2,,\1,/' Input_file
說明:首先使用-E選項sed啟用 ERE(擴展正則運算式)。然后在主程式中使用s選項執行替換操作。在替換的第一部分中創建 2 個反向參考(能夠通過使用正則運算式捕獲值并將它們保存在臨時緩沖存盤器中以備后用,同時在替換的第二部分中替換它)。在替換的第二部分,用 2 個逗號替換整行,然后是第二個捕獲組,\2然后是 2 個逗號,然后是第一個捕獲組,\1然后是,.
uj5u.com熱心網友回復:
您可以使用awk代替sed
cat input.csv | awk '{print ",," $1 "," $2 ","}' >> file.csv
awk可以逐行處理 stdin 輸入。它實作了一個列印函式,并且每個單詞都作為一個引數進行處理(在你的情況下,$1和$2)。在上面的例子中,我添加了,,and,作為行內引數。
uj5u.com熱心網友回復:
您可以輕松地添加空列作為sed腳本的一部分。
sed 'y/ /,/;s/,/,,/;s/^/,,/;s/$/,/' input.csv >> file.csv
這將用兩個替換第一個逗號,然后在前面添加兩個,在末尾添加一個。
但是,您的預期輸出看起來不像有效的 CSV。這也很脆弱,因為任何包含空格或逗號的檔案名都會失敗。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/357975.html
