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

これはあなたのために働くかもしれません(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

次のようなものが機能するperlはずです。

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

infileタブ文字の各行を分割し","、前後に追加しながら結合します"

于 2012-07-23T22:40:40.473 に答える
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

Pure 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 に答える