0

我想按行数拆分我的文本文件

前任

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;

谢谢。

4

2 回答 2

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"_
于 2013-09-19T04:36:18.473 回答
0

我尝试跟随,但问题仍然存在。

awk: syntax error near line 1.
awk: bailing out near line 1.

我在这里找到了解决方案

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。

然后我替换awkusr/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}
于 2013-09-23T10:34:18.913 回答