一個.txt
12
23
45
56
預期輸出:
12 >1.txt
23 >2.txt
45 >3.txt
56 >4.txt
我已經嘗試過以下給定的命令,但它不起作用:
sed -i s/$/\>1.txt/ a.txt
我想將值存盤12在檔案中1.txt;23在2.txt; 45在3.txt; 并且56在4.txt
我正在使用 Busybox,所以我沒有 Bash,而且 Awk 等的非便攜式使用也可能無法正常作業。
uj5u.com熱心網友回復:
您可以使用 awk 并為每一行增加一個 int
awk 'BEGIN{i=1} /.*/{printf "%s >%d.txt\n",$0,i; i }' a.txt
uj5u.com熱心網友回復:
使用sed
$ n=1; while read -r line; do sed s"/.*/echo & > $n.txt/e" <<< $line;n=$((n 1)); done < a.txt
$ cat 1.txt
12
uj5u.com熱心網友回復:
這可能對你有用(GNU sed & expr):
sed -n 'x;s/.*/expr & 1/e;x;/\S/G;s/\(.*\)\n\(.*\)/echo "\1" >\2.txt/e' file
在保持空間中存盤一個計數器,并為每行輸入遞增它。
將計數器附加到當前行,然后格式化運算式以將當前行存盤在由計數器指定的檔案中并對其進行評估。
uj5u.com熱心網友回復:
如果您的實際問題是如何將每一行寫入新檔案,請嘗試
awk 'NR>1 { close(f) }
{ f= n ".txt"; print >f }' a.txt
演示:https ://ideone.com/a65wFT(IdeOne 在 Linux 上運行,但我已在 BusyBox v1.34.1(2021-12-29 21:12:15 UTC)上單獨測驗過)
如果您無法讓 awk 作業,請嘗試
n=0
while read -r line; do
echo "$line" >"$(( n)).txt"
done <a.txt
或許也見split;但是,Busyboxsplit似乎對控制生成的輸出檔案名的支持有限。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/473100.html
