テキストから引用符を削除する方法

テキストから引用符を削除する方法

以下のファイルがあります。

"ID" "1" "2"
"00000687" 0 1
"00000421" 1 0

私がしたいことは次のとおりです。

00000687 0 1
00000421 1 0

欲しい

  1. 最初の行を削除して
  2. 別の行のフィールドから二重引用符を削除します。 FWIW、二重引用符は最初の列にのみ表示されます。

可能だと思いますcut -cが不可能です。どうすればいいですか?

答え1

tail+ tr:

tail -n +2 file | tr -d \"

tail -n+22行目から最後までファイルを印刷します。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コマンドの詳細については、次をご覧ください。場所

関連情報