列が1つしかない場合は、どのようにファイルに列を追加できますか(可能であればsed -iを使用)。

列が1つしかない場合は、どのようにファイルに列を追加できますか(可能であればsed -iを使用)。

次のデータ列があるとします。

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」と同じ)」。

おすすめ記事