如何处理一列的多个字符串

如何处理一列的多个字符串

我有一个逗号分隔的文件,看起来类似于他的格式:

aa.com,1.21.3.4,string1 string2 K=12     K2=23  K3=45 K4=56
bb.com,5.6.7.8,string1 string2 K=66     K2=77  K3=88 K4=99

我想获取第三列,其中包含由空格分隔的字符串。我想处理该文件,以用逗号分隔第三列前两个字符串,并忽略第三列中的其余字符串。前两个字段不包含空格。请注意,第三列中的字符串数量并不固定于所有记录。在此示例中,它是由 5 个空格分隔的 6 个字符串。但它可以或多或少。

我所需要的只是获取第三列的前两个字符串,用逗号分隔它们,并忽略第三列字符串的其余部分。

aa.com,1.21.3.4,string1,string2
bb.com,5.6.7.8,string1,string2

答案1

尝试:

awk '{print $1, $2}' OFS=, infile
aa.com,1.21.3.4,string1,string2
bb.com,5.6.7.8,string1,string2

如果在这种情况下,您的第一个或第二个字段中有空格,您会这样做:

awk -F, '{ match($3, /[^ ]* +[^ ]*/); 
           bkup=substr($3, RSTART, RLENGTH);
           gsub(/ +/, ",", bkup); # replace spaces with comma
           print $1, $2, bkup
}' OFS=, infile

解释:读入男人awk:

match(s, r [, a])  
          Return the position in s where the regular expression r occurs, 
          or 0 if r is not present, and set the values of RSTART and RLENGTH. (...)

substr(s, i [, n])
          Return the at most n-character substring of s starting at I.
          If n is omitted, use the rest of s.

RSTART
          The index of the first character matched by match(); 0 if no
          match.  (This implies that character indices start at one.)

RLENGTH
          The length of the string matched by match(); -1 if no match.

答案2

尝试这个:

awk -F '[, ]' '{print $1","$2","$3","$4}' file
aa.com,1.21.3.4,string1,string2
bb.com,5.6.7.8,string1,string2

答案3

您可以按如下方式执行此操作:

sed -ne 's/[[:blank:]]\{1,\}/,/;s//\n/;P' input-file.txt 

答案4

awk -F "[, ]" '{print $1,$2,$3,$4;OFS=","}' file

F "[, ]"将采用空格和逗号作为字段分隔符,并将;OFS=","输出字段分隔符设置为逗号。

相关内容