以下のファイルがあります。
"ID" "1" "2"
"00000687" 0 1
"00000421" 1 0
私がしたいことは次のとおりです。
00000687 0 1
00000421 1 0
欲しい
- 最初の行を削除して
- 別の行のフィールドから二重引用符を削除します。 FWIW、二重引用符は最初の列にのみ表示されます。
可能だと思いますcut -c
が不可能です。どうすればいいですか?
答え1
tail
+ tr
:
tail -n +2 file | tr -d \"
tail -n+2
2行目から最後までファイルを印刷します。tr -d \"
二重引用符をすべて削除してください。
答え2
これは働きます:
sed -i '1d;s/"//g' filename
説明する:
-i
ファイルを所定の位置に変更します。1d
最初の行を削除しますs/"//g
"
ファイルの内容はすべて削除されます。
最初に試みずに試みると、-i
出力は標準出力として印刷されます。
答え3
タイトルに示されている問題を解決するには、つまり、スペースで区切られた最初の列からのみ二重引用符を削除します。
awk -F ' ' '{ gsub("\"", "", $1) }; NR > 1' file
このgsub()
コマンドを使用して、各行の最初のフィールドにある二重引用符をすべて削除します。最終NR > 1
保証は最初の行を印刷しません。
最初のフィールドから二重引用符を削除するには(該当するフィールドの最初と最後の文字として表示される場合のみ)、次の手順を実行します。
awk -F ' ' '$1 ~ /^".*"$/ { $1 = substr($1, 2, length($1) - 2) }; NR > 1' file
これは正規表現を使用して^".*"$
最初のフィールドの先頭と末尾に二重引用符があるかどうかを検出し、その場合はsubstr()
文字列の内部部分を抽出するブロックをトリガーします。フィールドのすべての内部二重引用符は保持されます。
答え4
目的の出力を取得するにはいくつかの方法があり、その1つはcut -c
抽出する文字範囲を定義し、出力をコマンドtail --lines=+2
にパイプしてヘッダー(最初の行)を削除することです。たとえば、
cut -c2-9,11-14 <your_file_name> | tail --lines=+2
この-c2-9,11-14
オプションは、2〜9(ID列の文字位置)と11〜14( '''を除くすべての文字の文字位置)の範囲の文字位置を定義します。
このtail --lines=+2
コマンドはファイルのすべての行を印刷しますが、2行目から始まります。
cut
コマンドの詳細については、次をご覧ください。場所。