1

入力ファイル:

ID,Name,Values 
1,A,vA|A2
2,B,VB

期待される出力:

1,A,vA|VA2|vA3
2,B,VB 

ファイルで特定の ID を検索し、値 {field} に特定の値を追加します。

使用例 : ID = 1 の値フィールドに「testvalue」を追加

問題は次のとおりです。見つかった行をどのようにキャッシュしますか?

sedsは置換に使用できます。私はsed{ print pbut of no use } を使用しました。

4

5 に答える 5

2

次のスクリプトは、あなたのニーズと同様のことを行っています。純正bashです。

#!/usr/bin/bash
[ $# -ne 2 ] && echo "Arg missing" && exit 1;
while read l; do
   [ ${l%%,*} == "$1" ] && l="$l|$2"
   echo $l
done <infile

としてお使いいただけますscript <ID> <VALUE>。例:

$ ./script 1 va3
ID,Name,Values
1,A,vA|A2|va3
2,B,VB
$ cat infile
ID,Name,Values 
1,A,vA|A2
2,B,VB
于 2013-05-24T14:23:36.620 に答える
1

それともこれでしょうか?

awk '/vA/ { $NF=$NF"|VA2" } 1' FS=, OFS=,


$ echo "1,A,vA
2,B,VB" | awk '/vA/ { $NF=$NF"|VA2" } 1'  FS=, OFS=,
1,A,vA|VA2
2,B,VB

編集 1:awk最近、ファイル内置換のサポートを開始しました。しかし、あなたの要件ではsed、ケントが上に投稿したソリューションを使用するのが最善です.

$ cat file
ID,Name,Values
1,A,vA|A2
2,B,VB

$ awk '$1==1 { $NF=$NF"|vA3" } 1' FS=, OFS=, file
ID,Name,Values
1,A,vA|A2|vA3
2,B,VB
于 2013-05-24T13:18:27.830 に答える
1

これを探していますか?

kent$ echo "1,A,vA
2,B,VB"|sed '/vA/s/$/|VA2/'
1,A,vA|VA2
2,B,VB

編集ID を確認してから置き換えます

kent$  echo "ID,Name,Values 
1,A,vA|A2
2,B,VB"|sed 's/^1,.*/&|vA3/'
ID,Name,Values 
1,A,vA|A2|vA3
2,B,VB

&一致した部分を意味します。それはあなたが「キャッシュ」を意味したものです

于 2013-05-24T12:54:57.950 に答える
0

sed ' 1 a\ |VA2|vA3 ' file1.txt

于 2013-05-25T12:37:35.173 に答える