我想按行数分割我的文本文件
离
GenTextFile.txt
有3000行,我想拆分为
GenText_Output_1.txt
>> 1000行(第1 - 1000行)
GenText_Output_2.txt
>> 1000行(1001行 - 2000行)
GenText_Output_3.txt
>> 1000行(2001 - 3000行)
从控制台获取3个参数输入是输入名称,输出名称,要分割的行数
但是当我执行时,它有一个问题
/devhome/See/Split_file > ./shell_call_awk.sh GenTextFile.txt GenText_Output 1000
awk: syntax error near line 1
awk: bailing out near line 1
awk: can't open in_name
我做错了吗?
#!/bin/ksh
#echo "input name : $1"
#echo "output name : $2"
#echo "line split : $3"
input_name=$1
output_name=$2
line_split=$3
awk -v "in_name=$input_name" -v "out_name=$output_name" -v "line=$line_split"
awk 'NR%line==1{x=++i;}{print > out_name"_"x".txt"}' in_name
exit 1;
感谢。
答案 0 :(得分:3)
您只需要一个awk
命令,而不是两个单独的命令。输入文件不需要是一个awk变量,它只是一个命令行参数。
awk -v "out_name=$output_name" -v "line=$line_split" 'NR%line==1{x=++i;}{print > (out_name"_"x".txt")}' "$input_name"
您也可以使用split
命令(这需要GNU coreutils的版本):
split --numeric-suffixes --lines=$line_split "$input_name" "$output_name"_
答案 1 :(得分:0)
我试着跟随,但问题仍然存在。
awk: syntax error near line 1.
awk: bailing out near line 1.
我找到了解决方案here
Solaris is well known for the fact that the some commands under /bin /usr/bin are not POSIX compliant. Instead they have additional compliant versions under /usr/xpg4 and similar hierarchies.
Thus, under Solaris you can use just:
/usr/xpg4/bin/awk -v NAME=MACHINE '$1 == NAME' /etc/hosts
Under Solaris 10 this works.
当我使用命令man awk
时,我发现我正在运行SunOS 5.9。
然后我将awk
替换为usr/xpg4/bin/awk
有效!
@Barmar非常感谢您对awk命令行的建议。
- 这是我的代码 -
input_name=$1
output_name=$2
line_split=$3
/usr/xpg4/bin/awk -v "out_name=$output_name" -v "line=$line_split" 'NR%line==1{x=++i;}{print > out_name""x".txt"}' ${input_name}