次のデータ列があるとします。
sample123
sample456
samplexyz
以下を使用して、2つの新しい列を簡単に追加できます。
sed -i "s/$/\t1.1\tC/" <file.txt>
それ:
sample123 1.1 C
sample456 1.1 C
samplexyz 1.1 C
では、下部にいくつかの新しいデータを追加するとしましょう。
sample123 1.1 C
sample456 1.1 C
samplexyz 1.1 C
sampleNew1
sampleNew2
sampleNew3
このデータの新しい列を追加しようとすると、すべての行に追加されるので、次のように実行できます。
sed -i "s/$/\t1.2\tA/" <file.txt>
次のようになります。
sample123 1.1 C 1.2 A
sample456 1.1 C 1.2 A
samplexyz 1.1 C 1.2 A
sampleNew1 1.2 A
sampleNew2 1.2 A
sampleNew3 1.2 A
最初の列以外に他の列を持たない列を追加するには?
ベストアンサー1
まず、現在の行にタブ文字があるかどうかをテストし、そうでない場合は置き換えます。
sed -i '/\t/!s/$/\t1.2\tA/' file
ここでは、タブ文字を含まないすべての行を取得し、/\t/!
この行に置換を適用します。
上記は、GNUがタブ文字を認識するとsed
仮定しています。\t
他のsed
実装では、代わりにテキストタブを使用する必要があります\t
。他のsed
実装でも-i
このオプションをGNUとは異なる方法で処理できますsed
( "sed -i(所定の位置で編集)を使用して移植性を達成するには?")。
使用awk
:
awk -F "\t" 'BEGIN { OFS=FS } NF == 1 { $2 = "1.2"; $3 = "A" }; 1' file
その後、タブで区切られたフィールドの数をテストし、フィールドが1つしかない場合は、行を印刷する前に新しい2番目と3番目のフィールドを追加します。
これはファイルを現在の場所に変更しません。これを行うには、awk
次のようにGNUを使用します。
awk -i inplace -F "\t" 'BEGIN { OFS=FS } NF == 1 { $2 = "1.2"; $3 = "A" }; 1' file
awk
内部編集の詳細については、awkを使用してファイルを永久に変更するには? (「内部」編集、「sed -i」と同じ)」。