1

1.明示的に探している文字列または部分文字列を知っているか、2.文字列内の正確な位置を知っているか、3.両方を組み合わせたという仮定に基づいて、多くの検索および置換スレッドを見てきました。私の状況では、1 つの列と 1M 行を含む 1 つの csv ファイルがあります。例えば

1,google.com
2,yahoo.com
3,twitter.com
4,xyz.com

すべての列について、コンマまでのすべての文字 (インクリメントする整数) をhttp セミコロン dble スラッシュ dubdubdubに置き換えたい

これまでのところ、私は以下を持っています

HTTPSTRING="http://www."
cat X.csv << Will this ensure that the while block is executed on this file?
while IFS=, read line
  do {$line/(.*?),/HTTPSTRING} << This is where I am having trouble
done
exit 0

1 行に 1 つの URL を含むテキスト ファイルが必要です。

http://www.google.com
...
http://www.${999,999_more_urls} 

よろしくお願いします

ルイス

4

3 に答える 3

1

これは貪欲な一致を行います。これは、最初の整数と保持したい文字を区切るコンマ以外のコンマがある場合に問題になります。ただし、サンプル X.csv ファイルでは機能し、出力仕様を満たす Y.csv ファイルを生成します。

HTTPSTRING="http://www."
while read line
do
  echo ${line/*,/$HTTPSTRING}
done < X.csv > Y.csv
exit 0

価値があるのは、これをスクリプトに入れると、コード自体からファイル入力/入力リダイレクト部分を取り出し、代わりにスクリプトを呼び出すときにそれらを適用できることです。

bash 自体に厳密に制限されていない場合は、sed の使用を検討することをお勧めします。文字列内のスラッシュをエスケープするか、非標準の区切り文字を使用するかだけが異なります。

sed 's/[0-9]*,/http:\/\/www./' X.csv > Y.csv
sed 's~[0-9]*,~http://www.~' X.csv > Y.csv
于 2013-02-23T04:32:56.263 に答える
0

コマンドのみを使用できます。明示的な Bash ループは必要ありません。

cut -d',' -f2 < X.csv | sed 's_^_http://www._' > Y.txt

置換する文字列に含まれているため、 in の後に通常/使用されるsinsedが に置き換えられていることに注意してください。行の先頭に一致します。_^

于 2013-02-24T08:51:23.983 に答える
0

あなたのスクリプトは近いです。catの出力をループに直接パイプすることもできますがwhile、入力のリダイレクト ( < X.csv) を使用することをお勧めします。IFS=,beforeを使用するreadと、行がカンマで区切られたフィールドに分割されますが、2 番目のフィールドを保持するための変数が不足しています。

HTTPSTRING="http://www."
while IFS=, read number domain
do 
    echo "$HTTPSTRING$domain"
done < X.csv
于 2013-02-23T05:47:20.260 に答える