我有一个一列500行的数据集,为此,我想提取每一行并将其保存为单独的文件,因此最终得到500个文件。 数据如下:
100002
100003
100004
100005
100006
100007
...
,我希望将这些数字中的每一个存储在各自的文件中。 对于我的编码水平,我可以理解,也许做些类似的事情;
awk -F, 'NR==1 {print $0}' wholefile.txt> individual1.txt
可以通过手动更改数字来工作,但是如何设置它以遍历每一行并更改要创建的文件,以便它们被唯一命名,例如personal1,individual2等。
例如,打开personal1.txt时会显示100001,但文件名不是“ individual10001”
答案 0 :(得分:2)
如果您不关心文件名中的结尾.txt
,则可以使用split
命令
split -l 1 -d -a 3 wholefile.txt individual
这将创建带有顺序编号后缀individual000
,individual001
等的文件,最多不超过wholefile.txt
中的行数。数字不取决于wholefile.txt
的内容。
请参见man split
-d use numeric suffixes starting at 0, not alphabetic -a, --suffix-length=N generate suffixes of length N (default 2) --numeric-suffixes[=FROM] same as -d, but allow setting the start value -l, --lines=NUMBER put NUMBER lines/records per output file
选项参数-a 3
创建3位数字。您可能必须根据wholefile.txt
中的行数来更改此设置。前导零确保文件可以按字典顺序排序。
如果要将数字从1而不是0开头,请将-d
替换为--numeric-suffixes=1
。
如果要删除前导零,可以使用脚本在拆分后重命名文件。您也可以根据需要附加.txt
。
for file in individual*
do
newname="$(echo $file|sed 's/\([^0]*\)\(0*\)\([0-9]\)/\1\3/').txt"
mv "$file" "$newname"
done
sed
命令搜索三组
[^0]*
0个或多个不是0
的字符0*
0个或更多0
字符[0-9]
从0
到9
的数字,并用第一和第三组代替第二组来替换此模式。
这在这里有效,因为前缀individual
不包含数字。否则,sed
命令必须被扩展。
答案 1 :(得分:1)
类似这样的东西
count = 0
for i in `cat wholefile.txt`
do
# or let count=count+1
count=$((count+1))
echo $i >> individual$count.txt
done
答案 2 :(得分:0)
这是行号和sed
命令的循环,它显示行。输出将按预期写入单个文件。
for i in $(seq 1 $(wc -l wholefile.txt | grep -o '^ *[0-9]\+')); do
sed -n "${i}p" wholefile.txt > invidividual${i}.txt
done
请注意,对于500个文件,输出文件名格式不正确。您可能需要将以上文件名替换为invidividual$(printf "%03d" ${i}).txt
。
答案 3 :(得分:0)
纯bash解决方案是
j=0; while read -r line; do echo "$line" > "individual.$((j++)).txt"; done < file
awk解决方案应该是
awk '{f=sprintf("individual.%0.5d.txt",NR); "print > f; close(f) }' file
纯拆分解决方案
split -l 1 -d -a 5 --additional-suffix ".txt" file individual.
答案 4 :(得分:0)
使用for
逐行读取文件并用import ast
for node in ast.walk(ast.parse(code, '<string>')):
if isinstance(node, ast.FunctionDef) and node.name == 'foo':
code_obj = compile(ast.fix_missing_locations(ast.Module(body=[node])), '<string>', 'exec')
exec(code_obj)
print(eval('foo'))
对其进行写入
while read -r line;
答案 5 :(得分:0)
您可以执行以下操作。.
count = 1
cat wholefile.txt | while read line ;
do
echo $line >> individualtextfile_$count.txt
count=$[count+1]
done