1

抱歉格式不正确......现在它表明了这一点:

(列 - 制表符分隔)输入:

1 2 3 4

5 6 7 8

某些列可能如下所示:

1 一些文本 2 带空格的文本 3 很多 `:"' 等 4

5 6 7 8

如何制作输出:

“1” “2” “3” “4”

“5” “6” “7” “8”

甚至更好:

"1","2","3","4"

"5","6","7","8"

知道了!这有点愚蠢......但有效:

sed 's/\t/","/g' input.txt | sed 's/^/"/;s​​/$/"/'

第一个 sed 将制表符更改为“,”,下一个是在行首和行尾添加“。

4

5 回答 5

1

用 替换每个选项卡,在开头和结尾添加", "一个额外的:"

string=$'1\t2\t3\t4\t5\t6\t7\t8'
echo \"${string//$'\t'/\", \"}\"
于 2012-07-23T21:04:57.710 回答
0

我所知道的最简单的解决方案是perl

while read; do
  IFS=$'\t' perl -e '$,=","; $\="\n"; print map(qq/"$_"/, @ARGV); ' $REPLY
done < input.txt

bash需要临时变量的纯解决方案:

while read; do
  IFS=$'\t' printf -v var '"%s",' $REPLY
  echo "${var%,}"
done < input.txt
于 2012-07-23T21:07:34.420 回答
0

这可能对您有用(GNU sed):

echo -e '1\t2\t3\t4\t5\t6\t7\t8' | sed 's/[^\t]\+/"&"/g;y/\t/,/'
"1","2","3","4","5","6","7","8"
于 2012-07-23T21:25:32.460 回答
0

纯 Bash,用于制表符分隔的输出:

while read  line ; do
  echo -e "\"${line//$'\t'/\"\t\"}\""
done < "$infile"

对于逗号分隔的输出:

while read  line ; do
  echo -e "\"${line//$'\t'/\",\"}\""
done < "$infile"

字符串中允许有空格。

于 2012-07-24T10:33:52.660 回答
0

像这样的东西perl应该可以工作:

perl -F'\t' -lape '$_ = qw(") . join(qw(","), @F) . qw(")' infile

infile它拆分at 制表符的每一行并将它们与","同时预先和附加连接起来"

于 2012-07-23T22:40:40.473 回答