次のように、ファイルから最初の列を削除する必要があります。
165 1 chr22 42090593 0 1 chr22 42090609 1 42 42
166 1 chr22 42090593 0 1 chr22 42090654 1 42 42
167 1 chr22 42090595 0 1 chr22 42090633 1 42 42
168 0 chr22 42090612 0 1 chr22 42090656 1 42 42
169 0 chr22 42090614 0 0 chr22 42090617 1 40 42
170 0 chr22 42090647 0 1 chr22 42090749 1 42 42
171 1 chr22 42090684 0 1 chr22 42090692 1 42 42
172 1 chr22 42090733 0 1 chr22 42090743 1 42 42
173 1 chr22 42090733 0 1 chr22 42090775 1 42 42
174 1 chr22 42090733 0 1 chr22 42090789 1 42 42
175 1 chr22 42090757 0 1 chr22 42090787 1 42 24
176 0 chr22 42090778 0 0 chr22 42090790 1 42 42
177 0 chr22 42090800 0 0 chr22 42090802 1 42 42
178 0 chr22 42090803 0 0 chr22 42090806 1 42 42
注文する
awk '{$1=""; print $0}'
最初の列を正しく削除しますが、この方法で型を変更します。
1 chr22 51178322 0 0 chr22 51178659 1 42 42
0 chr22 51178661 0 0 chr22 51178663 1 42 42
0 chr22 51178667 0 1 chr22 51178790 1 42 23
1 chr22 51178755 0 0 chr22 51178764 1 42 42
0 chr22 51178808 0 1 chr22 51178871 1 42 42
1 chr22 51178869 0 1 chr22 51178895 1 42 42
1 chr22 51178881 0 1 chr22 51178893 1 42 42
1 chr22 51178881 0 1 chr22 51178895 1 42 42
1 chr22 51179213 0 1 chr22 51179213 1 42 42
1 chr22 51180087 0 1 chr22 51180093 1 42 42
1 chr22 51180134 0 0 chr22 51181889 1 42 42
0 chr22 51186192 0 0 chr22 51186192 1 42 42
0 chr22 51186192 0 0 chr22 51186192 1 42 42
どんなアイデアがありますか?
答え1
あなたのアプローチには2つの問題があります。まず、これはタブ区切りファイルのように見え、awkにタブを使用するように指示しませんでした。次に、awkでフィールドを設定するときに""
フィールドを削除するのではなく、消去するだけです。したがって、それでも印刷されるので、出力の各行の先頭に余分なスペースがあります。
したがって、awkでこれを行うには、次のことが必要です(例の先行スペースは実際にはファイルの一部ではないと仮定します)。
$ awk -F"\t" 'BEGIN{OFS="\t"}{for(i=2;i<NF;i++){printf "%s%s",$i,OFS} print $NF}' file
1 chr22 42090593 0 1 chr22 42090609 1 42 42
1 chr22 42090593 0 1 chr22 42090654 1 42 42
1 chr22 42090595 0 1 chr22 42090633 1 42 42
0 chr22 42090612 0 1 chr22 42090656 1 42 42
0 chr22 42090614 0 0 chr22 42090617 1 40 42
0 chr22 42090647 0 1 chr22 42090749 1 42 42
1 chr22 42090684 0 1 chr22 42090692 1 42 42
1 chr22 42090733 0 1 chr22 42090743 1 42 42
1 chr22 42090733 0 1 chr22 42090775 1 42 42
1 chr22 42090733 0 1 chr22 42090789 1 42 42
1 chr22 42090757 0 1 chr22 42090787 1 42 24
0 chr22 42090778 0 0 chr22 42090790 1 42 42
0 chr22 42090800 0 0 chr22 42090802 1 42 42
0 chr22 42090803 0 0 chr22 42090806 1 42 42
しかし、次のような他のツールはcut
すでに言及ここはもっと簡単です。ファイルがタブで区切られている場合は、次のことができます。
$ cut -f2- file
1 chr22 42090593 0 1 chr22 42090609 1 42 42
1 chr22 42090593 0 1 chr22 42090654 1 42 42
1 chr22 42090595 0 1 chr22 42090633 1 42 42
0 chr22 42090612 0 1 chr22 42090656 1 42 42
0 chr22 42090614 0 0 chr22 42090617 1 40 42
0 chr22 42090647 0 1 chr22 42090749 1 42 42
1 chr22 42090684 0 1 chr22 42090692 1 42 42
1 chr22 42090733 0 1 chr22 42090743 1 42 42
1 chr22 42090733 0 1 chr22 42090775 1 42 42
1 chr22 42090733 0 1 chr22 42090789 1 42 42
1 chr22 42090757 0 1 chr22 42090787 1 42 24
0 chr22 42090778 0 0 chr22 42090790 1 42 42
0 chr22 42090800 0 0 chr22 42090802 1 42 42
0 chr22 42090803 0 0 chr22 42090806 1 42 42
他の選択肢:
$ grep -oP '^\s*\S+\s*\K.*' file
1 chr22 42090593 0 1 chr22 42090609 1 42 42
1 chr22 42090593 0 1 chr22 42090654 1 42 42
1 chr22 42090595 0 1 chr22 42090633 1 42 42
0 chr22 42090612 0 1 chr22 42090656 1 42 42
0 chr22 42090614 0 0 chr22 42090617 1 40 42
0 chr22 42090647 0 1 chr22 42090749 1 42 42
1 chr22 42090684 0 1 chr22 42090692 1 42 42
1 chr22 42090733 0 1 chr22 42090743 1 42 42
1 chr22 42090733 0 1 chr22 42090775 1 42 42
1 chr22 42090733 0 1 chr22 42090789 1 42 42
1 chr22 42090757 0 1 chr22 42090787 1 42 24
0 chr22 42090778 0 0 chr22 42090790 1 42 42
0 chr22 42090800 0 0 chr22 42090802 1 42 42
0 chr22 42090803 0 0 chr22 42090806 1 42 42
または
$ perl -pe 's/^\s*\S+\s*//' file
1 chr22 42090593 0 1 chr22 42090609 1 42 42
1 chr22 42090593 0 1 chr22 42090654 1 42 42
1 chr22 42090595 0 1 chr22 42090633 1 42 42
0 chr22 42090612 0 1 chr22 42090656 1 42 42
0 chr22 42090614 0 0 chr22 42090617 1 40 42
0 chr22 42090647 0 1 chr22 42090749 1 42 42
1 chr22 42090684 0 1 chr22 42090692 1 42 42
1 chr22 42090733 0 1 chr22 42090743 1 42 42
1 chr22 42090733 0 1 chr22 42090775 1 42 42
1 chr22 42090733 0 1 chr22 42090789 1 42 42
1 chr22 42090757 0 1 chr22 42090787 1 42 24
0 chr22 42090778 0 0 chr22 42090790 1 42 42
0 chr22 42090800 0 0 chr22 42090802 1 42 42
0 chr22 42090803 0 0 chr22 42090806 1 42 42
または
$ perl -F'\t' -lane 'print join "\t",@F[1..$#F]' file
1 chr22 42090593 0 1 chr22 42090609 1 42 42
1 chr22 42090593 0 1 chr22 42090654 1 42 42
1 chr22 42090595 0 1 chr22 42090633 1 42 42
0 chr22 42090612 0 1 chr22 42090656 1 42 42
0 chr22 42090614 0 0 chr22 42090617 1 40 42
0 chr22 42090647 0 1 chr22 42090749 1 42 42
1 chr22 42090684 0 1 chr22 42090692 1 42 42
1 chr22 42090733 0 1 chr22 42090743 1 42 42
1 chr22 42090733 0 1 chr22 42090775 1 42 42
1 chr22 42090733 0 1 chr22 42090789 1 42 42
1 chr22 42090757 0 1 chr22 42090787 1 42 24
0 chr22 42090778 0 0 chr22 42090790 1 42 42
0 chr22 42090800 0 0 chr22 42090802 1 42 42
0 chr22 42090803 0 0 chr22 42090806 1 42 42
答え2
区切り文字にスペースがある場合は、次のように動作できます。
sed 's/^ *//' text.file | cut -f1 -d" " --complement
答え3
実際にいると仮定先行スペースなしファイルでは、次のsed
ベース方法が機能するはずです。
sed -r 's/^[[:digit:]]+[[:blank:]]+//' input_file
またはもっと一般的に(@terdonが提案したように)
sed -r 's/^[^[:blank:]]+[[:blank:]]+//' input_file
最初の例では、1 つ以上の数字を行の先頭から始まる「None」に置き換え、その後に 1 つ以上の空白文字を追加して、残りの部分を変更せずに行の対応する部分を削除します。
2番目の例では、「空白ではない」文字と1つ以上の空白文字を削除するため、最初の列にテキスト(ヘッダー行など)を含めることができる場合は、より一般的に適用できます。
先行スペースがある場合は、次のように修正します。
sed -r 's/^[[:blank:]]*[^[:blank:]]+[[:blank:]]+//' input_file
最初にゼロ個以上のスペースを含むパターンを削除できるため、この問題を解決する必要があります。
スペースとタブと一致するため、[[:blank:]]
タブで区切られたファイル形式でも機能する必要があります。
一般的な注意事項として、使用中の形式の変更はawk
通常、設定の失敗によって発生します。出力フィールド区切り記号 OFS
適切な値で。awk
ルールの個々のフィールドを変更すると、$0
現在の値がデフォルト値を使用して再生成され、元の行の形式が上書きされます。OFS
SPACE
したがって、入力ファイルがTAB
区切られている場合、フィールドを変更すると、出力が空白で区切られ、説明されている形式の変更が記述されます。適切な内部変数を設定することでこの問題を克服できます。
awk -v OFS='\t' '{あなたのコードはここにあります} '入力ファイル
これが起こらないようにするには、@terdonすでに言及、単にフィールドを空の文字列に設定しても、そのフィールドは削除されず、余分なフィールド区切り記号が必要になります。
答え4
gnu sedを使用してこれを行うことができます。
$ sed -Ee 's/\S+/\n&/2;s/.*\n//' file
2番目のフィールドの先頭を表示し、その前のすべての項目を削除します。
上記と同じ方法ですが、awkを使用します。
awk '
BEGIN {
s = "[[:space:]]"; S = "[^[:space:]]"
F = S"+"s"*"
}
sub(s"*" F, "")+1
' file
上記と同じですが、一致する機能があります
awk '
BEGIN {
s = "[[:space:]]"; S = "[^[:space:]]"
F = S"+"s"*"
}
match($0, F) {
$0 = substr($0, RSTART+RLENGTH)
}1
' file