我有一個包含線和分離,並依次數據爲.txt「」例如:修改行.txt文件在bash
10,05,nov,2016,122,2,2,330,user
我要的是能夠修改不重複搜索方法是唯一的第一個數字的X行的參數。 例如找到數字10(f1)並修改包含122(f5)的行。 我用sed
試過了,但我做不到。 我已經評論說可以用awk
,但我沒有學習過這個命令。 有些幫助?
我有一個包含線和分離,並依次數據爲.txt「」例如:修改行.txt文件在bash
10,05,nov,2016,122,2,2,330,user
我要的是能夠修改不重複搜索方法是唯一的第一個數字的X行的參數。 例如找到數字10(f1)並修改包含122(f5)的行。 我用sed
試過了,但我做不到。 我已經評論說可以用awk
,但我沒有學習過這個命令。 有些幫助?
一個簡單的awk腳本類似下面應該做的伎倆:
awk -v find="10" -v field="5" -v newval="abcd" 'BEGIN {FS=OFS=","} {if ($1 == find) $field=newval; print $0}' test.csv
說明:
awk -v find="10" -v field="5" -v newval="abcd"
:定義awk的3個變量。 find
,其中包含我們正在尋找的模式,field
包含我們要編輯的字段的編號,以及newval
與要替換的值。BEGIN {FS=OFS=","}
:在遍歷文件之前,我們將文件分隔符和輸出文件分隔符設置爲「,」。if ($1 == find) $field=newval
:如果某行的1RST字段包含我們想要的模式,我們設定的第N場(1日如果$field=1
,第二如果$field=2
,...)來的newval
print $0
價值:不論結果如何,從如果測試,我們打印整條線。較短(但不太理解的)版本的腳本可以寫爲:
awk -v a="10" -v f="5" -v n="abcd" -F, '$1 == a {$f=n}OFS=FS' test.csv
凡a
指find
,f
指field
,n
指newval
和-F,
指FS=","
腳本在行動:
> cat test.csv
11,05,nov,2016,122,2,2,330,user
10,05,nov,2016,123,2,2,330,user
12,05,nov,2016,124,2,2,330,user
> awk -v find="10" -v field="5" -v newval="abcd" 'BEGIN {FS=OFS=","} {if ($1 == find) $field=newval; print $0}' test.csv
11,05,nov,2016,122,2,2,330,user
10,05,nov,2016,abcd,2,2,330,user
12,05,nov,2016,124,2,2,330,user
使用sed:
$ sed '/^10/s/,[^,]*/,333/4' <<< "10,05,nov,2016,122,2,2,330,user"
10,05,nov,2016,333,2,2,330,user
在開始10
線,尋找第四逗號緊跟非逗號字符,並與您的替換字符串替換。
請將您希望的輸出樣本輸入添加到您的問題中。 – Cyrus
歡迎來到Stack Overflow!請[編輯]你的問題,以顯示[你迄今爲止所嘗試的](http://whathaveyoutried.com)。您應該包含您遇到問題的代碼[mcve],然後我們可以嘗試幫助解決特定問題。你還應該閱讀[問]。 –