私はこれが簡単だと思いますが、それを行う方法がわかりません。
想像する
、、、列を.csv
含むファイルがあり、各列は次のように区切ります。id_user
text
id_group
tabs
"123456789" "Here's the field of the text, also contains comma" "10"
"987456321" "Here's the field of the text, also contains comma" "10"
"123654789" "Here's the field of the text, also contains comma" "11"
"987456123" "Here's the field of the text, also contains comma" "11"
テキストを見つける方法は?
試みる
アッ
区切り文字を指定する方法を探していますprint $n
。そうすることができれば、1つのオプションは次のとおりです。
$ awk -d '\t' '{print $2}' file.csv | sed -e 's/"//gp'
-d
オプションの区切り文字はどこにあり、削除されますprint
。sed
"
答え1
タブ区切り記号
切る
sed
orは不要で、awk
簡単な方法でcut
行われます。
cut -f2 infile
アッ
awkを使用するには、パラメータまたはサフィックスを介して区切り-F
文字FS=
を提供する方法があります。
awk -F '\t' '{ print $2 }' infile
または:
awk '{ print $2 }' FS='\t' infile
すべての場合の出力:
"Here's the field of the text, also contains comma"
"Here's the field of the text, also contains comma"
"Here's the field of the text, also contains comma"
"Here's the field of the text, also contains comma"
引用区切り記号
ファイルに二重引用符が一貫している場合、つまりフィールドに二重引用符が含まれていない場合は、区切り文字として使用し、出力では使用しないことがあります。たとえば、次のようになります。
切る
cut -d\" -f4 infile
アッ
awk -F\" '{ print $4 }' infile
どちらの場合も出力:
Here's the field of the text, also contains comma
Here's the field of the text, also contains comma
Here's the field of the text, also contains comma
Here's the field of the text, also contains comma
答え2
grep
PCRE()と組み合わせて使用できます-P
。
grep -Po '\s"\K[^"]+(?="\s)' file.txt
\s"
後にスペースがある場合は一致し、一致を削除します"
。\K
[^"]+
"
2つの間で目的の部分を取得します。(?="\s)
"
必須部分の後にスペース文字が続くことを確認する幅がゼロの肯定的な予測モードです。
例:
$ grep -Po '\s"\K[^"]+(?="\s)' file.txt
Here's the field of the text, also contains comma
Here's the field of the text, also contains comma
Here's the field of the text, also contains comma
Here's the field of the text, also contains comma
答え3
tab
区切り記号で指定
$ awk -F '\t' '{print $2}' file.csv
行って不要なものを持っていく"
$ awk -F '\t' '{print $2}' file.csv | sed 's/"//g'
他のオプションの使用awk -F
$ awk -F '"' '{print $4}' file.csv
答え4
あなたのsed部分は正しいです。awk -F '\t'
以下を使用または使用できます。
awk 'BEGIN{FS="\t"} {print $2}' file.csv | sed 's/"//g'
または、sedを使用したくない場合は、最初のawkの出力を2番目のawkにパイプし、フィールド「区切り文字」として「」を使用してから2番目のフィールドを印刷できます。
awk 'BEGIN{FS="\t"} {print $2}' file.csv | awk -F "\"" '{print $2}'