制表符分隔符

制表符分隔符

我认为这很简单,但不知道如何做。

设想

我有一个.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"

如何找到文本?

试图

awk

我正在寻找一种指定print $n分隔符的方法,如果我能做到的话,一个选项将是

$ awk -d '\t' '{print $2}' file.csv | sed -e 's/"//gp'

其中-d是选项的分隔符print, 是sed取出"

答案1

制表符分隔符

你不需要sedor awk,一个简单的cut就可以了:

cut -f2 infile

awk

如果您想使用 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

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"匹配任何后跟 a 的空格"\K放弃匹配

  • [^"]+得到两个"s之间我们想要的部分

  • (?="\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

将 the 指定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 的输出通过管道传输到第二个 awk,然后使用 '"' 作为字段分隔符,然后打印第二个字段。

awk 'BEGIN{FS="\t"} {print $2}' file.csv | awk -F "\"" '{print $2}'

相关内容