我的脚本的输出是使用awkas作为制表符分隔的:
awk -v variable=$bashvariable '{print variable"\t single\t" $0"\t double"}' myinfile.c
Run Code Online (Sandbox Code Playgroud)
该awk命令在while循环中运行,该循环更新每个循环的变量值和文件myinfile.c. 我用这个命令得到了预期的结果.但是如果inmyfile.c包含一个空行(它可以包含),则它不会打印任何相关信息.我可以告诉awk忽略空行吗?
我知道可以通过从myinfile.c中删除空行然后再将其传递给它来完成awk.我知道sed并且tr方式但我想awk在上面提到的命令本身中做,而不是如下所示的单独解决方案或管道.
sed '/^$/d' myinfile.c
tr -s "\n" < myinfile.c
Run Code Online (Sandbox Code Playgroud)
提前感谢您的建议和回复.
虽然__attribute__ ((aligned))适用于typedef声明,例如:
typedef struct __attribute__((__aligned__(8))) A {
xxx ip ;
xxx udp ;
xxx ports ;
} table ;
Run Code Online (Sandbox Code Playgroud)
我遇到过声明,说__attribute__ ((__packed__)) 使用typedef 不是这种情况!我正在阅读一些相关的问题,其中一些使用了带有typedef的packed属性,它与我们的代码相符.
现在,在我们的代码中我们定义
typedef struct {
xxx ip ;
xxx udp ;
xxx ports ;
}__attribute__((packed)) table ;
Run Code Online (Sandbox Code Playgroud)
上述声明是否使编译器以静默方式转储打包属性声明?
PS:是的,我本可以验证一下,但我现在的情况有所不同.让我们说假期和智能手机!
我正在尝试从bash中的特定行开始逐行读取文件.我已经使用while命令通过递增计数来读取文件的每一行.我可以从特定的线开始吗?
let count=0
declare -a ARRAY
while read LINE; do
ARRAY[$count]=$LINE
vech=${ARRAY[$count]}
if [...blah ..]
then
...blah..
fi
sleep 2
((count++))
done < filec.c
Run Code Online (Sandbox Code Playgroud)
欢迎以建议或算法的形式提供任何形式的帮助.
编辑:我正在尝试将行号作为变量传递.我正在Grepping一个特定的模式,如果找到,应该从模式开始传递行号.
我可以保留各自不同的字符在正则表达式匹配的计数本身?
假设正则表达式看起来像 />(.*)[^a]+/
我可以记录p组中捕获的字符串中的字母数(.*)吗?
是否可以从bash脚本写入excel表(任何类型)?
我正在寻找的东西是这样的:
sed -e :a -e '$!N; s/\n/ /; ta' file.c > #( first coloumn ,second row of the spread sheet )
echo "$cdvar" > #( second coloumn ,third row of the spread sheet )
Run Code Online (Sandbox Code Playgroud)
感谢您的回复和建议.
我在文件中有一个模式如下,它可以/不能跨越多行:
abcd25
ef_gh
( fg*_h
hj_b*
hj ) {
Run Code Online (Sandbox Code Playgroud)
我尝试过的:
perl -nle'打印时m/^\s*(\ w +)\ s +(\ w +?)\ s*(([\ w-0-9,*\s] ))\ s {/ gm'
我不知道这里的标志是什么意思,但我所做的只是regex为模式写一个并将其插入模式空间.如果模式在一行中,则匹配良好:
abcd25 ef_gh ( fg*_h hj_b* hj ) {
Run Code Online (Sandbox Code Playgroud)
但仅在多线情况下失败!
我昨天开始使用perl,但语法太混乱了.因此,正如我们的SO伙伴之一所建议的那样,我写了一个regex并将其插入到他提供的代码中.
我希望perl在这种情况下,和尚可以帮助我.欢迎替代解决方案.
输入文件 :
abcd25
ef_gh
( fg*_h
hj_b*
hj ) {
abcd25
ef_gh
fg*_h
hj_b*
hj ) {
jhijdsiokdù ()lmolmlxjk;
abcd25 ef_gh ( fg*_h hj_b* hj ) {
Run Code Online (Sandbox Code Playgroud)
预期产量:
abcd25
ef_gh
( fg*_h
hj_b*
hj ) {
abcd25 ef_gh …Run Code Online (Sandbox Code Playgroud) sed如果我需要提取由特定模式包围的模式(如果它存在于一行中),我可以使用吗?
假设我有一个包含以下行的文件:
有许多人不敢为邻居所说的[/恐惧/]而自杀.
当我们已经知道
/*答案时,建议就是我们所要求的,*/但希望我们没有.
在这两种情况下,我必须扫描线以获得第一个出现的模式,即在各自的情况下为"[ /或/*",并存储以下模式,直到分别退出模式,即' /]'或' */.
简而言之,我需要fear和answer.如果可能,可以扩展多行;从某种意义上说,如果退出模式出现在不同于同一行的行中.
欢迎以建议或算法的形式提供任何形式的帮助.在此先感谢您的回复
我一直在使用Linux env,最近迁移到solaris.不幸的是我的bash脚本中的一种需要使用grep与P开关[PCRE支持].作为的Solaris犯规支持pcre的grep的选项,我不得不另寻解决的问题; pcregrep似乎有一个明显的循环错误和 sed -r选项是不支持!我希望使用perl或nawk将解决solaris上的问题.
我还没有perl在我的脚本中使用它并不知道它的语法和标志.
既然是pcre,我beleive,一个perl编剧可以帮我在几分钟之内.它们应匹配多行.
在效率awk 或perl解决方案方面哪一个是更好的解决方案?
谢谢你的回复.
我有一个文本文件,如下所示:
125
126
127 {
566
567
568
569 # blah blah
570 { #blah blah
700
701 {
Run Code Online (Sandbox Code Playgroud)
数字是左对齐的,模式在增加的意义上总是相同,最后是花括号.我只需要捕获起始数字.大括号总是被找到并限于序列结尾.文件的开头如图所示从'125'开始.
总之我需要:
125
566
700
Run Code Online (Sandbox Code Playgroud)
我想出了什么:
grep -A1 '{' | grep -v '{' | grep -oE '(^[0-9]+?)'
Run Code Online (Sandbox Code Playgroud)
但这省略了'125',但我通过在头部附加换行并插入一个来克服{.
我希望将其减少为单个正则表达式.
欢迎提出建议和更好的算法
我有一个awk脚本,它被调用:
awk -f myawkfile.awk arguments
Run Code Online (Sandbox Code Playgroud)
使用相同的提到的调用将awk脚本调用到我的bash脚本中.
我可以而不是调用awk脚本将其声明为我的bash脚本中的函数.我认为通过awk在前面和后面勾选整个代码然后分配一个函数名来随意调用它会很容易.不知怎的,它没有做到这一点.
我试图这样做是因为我不希望我的脚本依赖于另一个脚本.而且我不是编写awk剧本的人.它需要一个文件作为输入,做一些东西并返回我脚本中使用的修改过的文件.
我想知道重复使用同一组变量是否会导致 bash 脚本中出现任何不可预见的事件。这通常被认为是一个好的做法吗?
为了让我的查询更清楚一些。
我有一个像这样的脚本:
max=`cat loc1.c | wc -l`
bar=1
while [ $bar -lt $max ]
do
f1=`awk -v vr1=$bar 'NR == vr1' loc1.c`
f2=`awk -v vr1=$bar 'NR == vr1' loc2.c`
if [[ a random file exists ]] ; then # use var1 var2 var3 ; fi
if [[ a random file2 exists ]] ; then # use var1 var2 var3 ; fi
if [[ a random file3 exists ]] ; then # use var1 var2 var3 ; fi …Run Code Online (Sandbox Code Playgroud) 如果找到匹配,我可以使用sed或awk附加到上一行吗?
我有一个文件格式:
INT32
FSHL (const TP Buffer)
{
INT32
FSHL_lm (const TP Buffer)
{ WORD32 ugo = 0; ...
Run Code Online (Sandbox Code Playgroud)
我要做的是扫描独立的开括号{并将其附加到前一个非空白行.对于由同一行中的任何内容追加的开括号,不应该发生匹配.
预期产量:
INT32
FSHL (const TP Buffer){
INT32
FSHL_lm (const TP Buffer)
{ WORD32 ugo = 0; ...
Run Code Online (Sandbox Code Playgroud)
谢谢你的回复.